package br.edu.faculdadeprojecao.modelo;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotEmpty;

import br.edu.faculdadeprojecao.enuns.Perfil;

/**
 * Classe que modela os usuarios.
 * 
 * @author talles e odilon
 * 
 */

@Entity
public final class Usuario implements Serializable {

	private static final long serialVersionUID = -1951707887742878852L;

	@GeneratedValue
	@Id
	private Integer id;

	@NotEmpty(message = "Informe o nome do Usuario")
	private String nome;

	@NotEmpty(message = "Informe o Sobrenome")
	private String sobrenome;

	@NotEmpty(message = "Informe a matricula")
	@Column(unique = true)
	private String matricula;

	@Column(unique = true)
	private String login;

	@NotEmpty(message = "Informe a senha")
	private String senha;

	@NotNull(message = "Informe o perfil")
	private Perfil perfil;

	private String rg;

	private String OrgaoExpedidor;

	private boolean ativo = true;

	@OneToOne(cascade = { CascadeType.ALL }, mappedBy = "usuario")
	private Professor professores;

	@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "usuario")
	private List<Telefone> telefones;

	@OneToOne(cascade = { CascadeType.ALL }, mappedBy = "usuario")
	private Endereco endereco;

	@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "usuario")
	private List<Formacao> formacoes;

	@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "usuario")
	private List<ExperienciaDocente> experienciaDocentes;

	@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "usuario")
	private List<ExperienciaProfissional> experienciaProfissional;

	@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "usuario")
	private List<AtividadeCientifica> atividadeCientifica;

	@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "usuario")
	private List<Publicacao> publicacao;

	
	public List<ExperienciaProfissional> getExperienciaProfissional() {
		return experienciaProfissional;
	}

	public void setExperienciaProfissional(
			List<ExperienciaProfissional> experienciaProfissional) {
		this.experienciaProfissional = experienciaProfissional;
	}

	public List<AtividadeCientifica> getAtividadeCientifica() {
		return atividadeCientifica;
	}

	public void setAtividadeCientifica(List<AtividadeCientifica> atividadeCientifica) {
		this.atividadeCientifica = atividadeCientifica;
	}

	public List<Publicacao> getPublicacao() {
		return publicacao;
	}

	public void setPublicacao(List<Publicacao> publicacao) {
		this.publicacao = publicacao;
	}

	public List<ExperienciaDocente> getExperienciaDocentes() {
		return experienciaDocentes;
	}

	public void setExperienciaDocentes(List<ExperienciaDocente> experienciaDocentes) {
		this.experienciaDocentes = experienciaDocentes;
	}

	public List<Telefone> getTelefones() {
		return telefones;
	}

	public void setTelefones(List<Telefone> telefones) {
		this.telefones = telefones;
	}

	public Professor getProfessores() {
		return professores;
	}

	public void setProfessores(Professor professor) {
		this.professores = professor;
	}

	public Perfil getPerfil() {
		return perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public boolean isAtivo() {
		return ativo;
	}

	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}

	public String getRg() {
		return rg;
	}

	public void setRg(String rg) {
		this.rg = rg;
	}

	public String getOrgaoExpedidor() {
		return OrgaoExpedidor;
	}

	public void setOrgaoExpedidor(String orgaoExpedidor) {
		OrgaoExpedidor = orgaoExpedidor;
	}

	
	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public List<Formacao> getFormacoes() {
		return formacoes;
	}

	public void setFormacoes(List<Formacao> formacoes) {
		this.formacoes = formacoes;
	}
}
